package com.baidu.utils;

/*
1.生成token （字符串）
2.校验令牌是否合法*/


import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.json.JSONObject;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;

public class JwtUtil2 {
    //测试
    public static void main(String[] args) {
        String token = generateToken("1001", "zs", "zs@qq.com");
        System.out.println(token);
        //调用下面的方法校验令牌是否合法
        boolean b = verifyToken(token);
        System.out.println(b);
    }

    //密钥
    private static final String SECRET_KEY = "@xxxx123";


    //生成令牌
    public static String generateToken(String userId, String username, String userCode) {
        //设置令牌过期的时间
        DateTime now = DateTime.now();
        DateTime expTime = now.offsetNew(DateField.MINUTE, 60); // 令牌1小时后过期

        //准备好令牌包含的内容
        JSONObject payloadJson = new JSONObject();
        payloadJson.set("userId", userId);
        payloadJson.set("username", username);
        payloadJson.set("userCode", userCode);

        //设置令牌生成的时间以及过期的 时间
        payloadJson.set(JWTPayload.ISSUED_AT, now);
        payloadJson.set(JWTPayload.EXPIRES_AT, expTime);

        //生成令牌
        String token = JWTUtil.createToken(payloadJson, SECRET_KEY.getBytes());


        return token;
    }


    //校验令牌是否合法
    public static boolean verifyToken(String token) {
        JWT jwt = JWTUtil.parseToken(token);
        boolean verifyKey = jwt.setKey(SECRET_KEY.getBytes()).verify();
        boolean verifyTime = jwt.validate(0);
        return verifyKey && verifyTime;
    }

}
